From 01aab3bc5d9708f6e80c5521b7449a404db9595d Mon Sep 17 00:00:00 2001 From: Sergei Korotaev Date: Fri, 2 May 2025 00:47:24 +0300 Subject: [PATCH] Initial commit. --- app/build.gradle | 23 +++++---- app/src/main/AndroidManifest.xml | 8 +++ .../otus/gpb/homework/fragments/ActivityA.kt | 20 ++++++++ .../otus/gpb/homework/fragments/ActivityB.kt | 42 ++++++++++++++++ .../otus/gpb/homework/fragments/FragmentA.kt | 50 +++++++++++++++++++ .../otus/gpb/homework/fragments/FragmentAA.kt | 50 +++++++++++++++++++ .../otus/gpb/homework/fragments/FragmentAB.kt | 43 ++++++++++++++++ .../otus/gpb/homework/fragments/FragmentBA.kt | 38 ++++++++++++++ .../otus/gpb/homework/fragments/FragmentBB.kt | 31 ++++++++++++ .../gpb/homework/fragments/FragmentResult.kt | 29 +++++++++++ .../gpb/homework/fragments/MainActivity.kt | 10 ++++ app/src/main/res/layout-land/activity_b.xml | 19 +++++++ app/src/main/res/layout/activity_a.xml | 11 ++++ app/src/main/res/layout/activity_b.xml | 11 ++++ app/src/main/res/layout/activity_main.xml | 18 +++++-- app/src/main/res/layout/fragment_a.xml | 39 +++++++++++++++ app/src/main/res/layout/fragment_aa.xml | 29 +++++++++++ app/src/main/res/layout/fragment_ab.xml | 15 ++++++ app/src/main/res/layout/fragment_ba.xml | 31 ++++++++++++ app/src/main/res/layout/fragment_bb.xml | 31 ++++++++++++ app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 6 +++ build.gradle | 4 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 24 files changed, 544 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentAB.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentBA.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentBB.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/FragmentResult.kt create mode 100644 app/src/main/res/layout-land/activity_b.xml create mode 100644 app/src/main/res/layout/activity_a.xml create mode 100644 app/src/main/res/layout/activity_b.xml create mode 100644 app/src/main/res/layout/fragment_a.xml create mode 100644 app/src/main/res/layout/fragment_aa.xml create mode 100644 app/src/main/res/layout/fragment_ab.xml create mode 100644 app/src/main/res/layout/fragment_ba.xml create mode 100644 app/src/main/res/layout/fragment_bb.xml diff --git a/app/build.gradle b/app/build.gradle index c5cf1b8..44c4f89 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,12 +3,8 @@ plugins { id 'org.jetbrains.kotlin.android' } -kotlin { - jvmToolchain(17) -} - android { - compileSdk 34 + compileSdk 35 namespace "otus.gpb.homework.fragments" defaultConfig { @@ -34,15 +30,20 @@ android { kotlinOptions { jvmTarget = '17' } + + buildFeatures { + viewBinding = true + } } dependencies { - implementation 'androidx.core:core-ktx:1.7.0' - implementation 'androidx.appcompat:appcompat:1.5.1' - implementation 'com.google.android.material:material:1.6.1' - implementation 'androidx.constraintlayout:constraintlayout:2.1.4' + implementation 'androidx.core:core-ktx:1.16.0' + implementation 'androidx.appcompat:appcompat:1.7.0' + implementation 'com.google.android.material:material:1.12.0' + implementation 'androidx.constraintlayout:constraintlayout:2.2.1' + implementation 'androidx.fragment:fragment-ktx:1.8.6' testImplementation 'junit:junit:4.13.2' - androidTestImplementation 'androidx.test.ext:junit:1.1.3' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' + androidTestImplementation 'androidx.test.ext:junit:1.2.1' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9604b34..c8e63bf 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -21,6 +21,14 @@ + + \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt new file mode 100644 index 0000000..2525e79 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt @@ -0,0 +1,20 @@ +package otus.gpb.homework.fragments + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity + +class ActivityA : AppCompatActivity() { + + private lateinit var fragmentA: FragmentA + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_a) + if (savedInstanceState == null) { + fragmentA = FragmentA() + supportFragmentManager.beginTransaction() + .replace(R.id.activity_a_container, fragmentA) + .commit() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt new file mode 100644 index 0000000..b09523a --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt @@ -0,0 +1,42 @@ +package otus.gpb.homework.fragments + +import android.content.res.Configuration +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity + +class ActivityB : AppCompatActivity() { + private val saveColor = "saveColor" + private var baColor: Int = 0 + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_b) + + if (savedInstanceState != null) { + baColor = savedInstanceState.getInt(saveColor) + } + + val fba = FragmentBA() + + if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { + supportFragmentManager.beginTransaction() + .replace(R.id.activity_ba_container, fba) + .replace(R.id.activity_bb_container, FragmentBB()) + .commit() + } else { + supportFragmentManager.beginTransaction() + .replace(R.id.activity_b_container, fba) + .commit() + } + + fba.sendColor(baColor) + supportFragmentManager.observeColor(this) {color -> + baColor = color + } + } + + override fun onSaveInstanceState(outState: Bundle) { + super.onSaveInstanceState(outState) + outState.putInt(saveColor, baColor) + } +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt new file mode 100644 index 0000000..cbb1da6 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt @@ -0,0 +1,50 @@ +package otus.gpb.homework.fragments + +import android.content.Context +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.activity.OnBackPressedCallback +import otus.gpb.homework.fragments.ColorGenerator.generateColor + +class FragmentA : Fragment() { + + override fun onAttach(context: Context) { + super.onAttach(context) + + val callback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (childFragmentManager.backStackEntryCount > 0) { + childFragmentManager.popBackStack() + } else { + isEnabled = false + @Suppress("DEPRECATION") + requireActivity().onBackPressed() + } + } + } + + requireActivity().onBackPressedDispatcher.addCallback(callback) + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_a, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + view.findViewById