diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9604b34..46bc072 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,6 +12,12 @@
android:supportsRtl="true"
android:theme="@style/Theme.Fragments"
tools:targetApi="31">
+
+
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..b8ec4a5
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt
@@ -0,0 +1,16 @@
+package otus.gpb.homework.fragments
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+
+class ActivityA : AppCompatActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_a)
+
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.activity_a, 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..ef39ea2
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt
@@ -0,0 +1,16 @@
+package otus.gpb.homework.fragments
+
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+
+class ActivityB : AppCompatActivity() {
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_b)
+
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.activity_b, FragmentB())
+ .commit()
+ }
+}
\ 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..0422427
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt
@@ -0,0 +1,54 @@
+package otus.gpb.homework.fragments
+
+import android.content.Context
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.activity.OnBackPressedCallback
+import androidx.fragment.app.Fragment
+import com.google.android.material.button.MaterialButton
+
+class FragmentA : Fragment() {
+
+ private fun generateBackgroundColor() = ColorGenerator.generateColor()
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ if (childFragmentManager.backStackEntryCount > 1) childFragmentManager.popBackStack()
+ else {
+ isEnabled = false
+ requireActivity().onBackPressedDispatcher.onBackPressed()
+ }
+ }
+ }
+ requireActivity().onBackPressedDispatcher.addCallback(this, 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(R.id.fragment_a_btn).setOnClickListener {
+ childFragmentManager.beginTransaction()
+ .replace(R.id.fragment_aa, FragmentAA.newInstance(generateBackgroundColor()))
+ .addToBackStack(null)
+ .commit()
+ }
+ }
+
+ fun createFragmentAB() {
+ childFragmentManager.beginTransaction()
+ .replace(R.id.fragment_aa, FragmentAB.newInstance(generateBackgroundColor()))
+ .addToBackStack(null)
+ .commit()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt b/app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt
new file mode 100644
index 0000000..d69e371
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt
@@ -0,0 +1,41 @@
+package otus.gpb.homework.fragments
+
+import android.graphics.Color
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import com.google.android.material.button.MaterialButton
+
+private const val COLOR_ARG = "color_arg"
+
+class FragmentAA : Fragment() {
+
+ private fun getBackgroundColor() = arguments?.getInt(COLOR_ARG) ?: Color.WHITE
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(R.layout.fragment_aa, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ view.setBackgroundColor(getBackgroundColor())
+ view.findViewById(R.id.fragment_ab_btn).setOnClickListener {
+ (parentFragment as FragmentA).createFragmentAB()
+ }
+ }
+
+ companion object {
+ fun newInstance(color: Int): FragmentAA {
+ fun setBundleArgument() = Bundle().apply { putInt(COLOR_ARG, color) }
+ return FragmentAA().apply {
+ arguments = setBundleArgument()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/fragments/FragmentAB.kt b/app/src/main/java/otus/gpb/homework/fragments/FragmentAB.kt
new file mode 100644
index 0000000..f31263c
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentAB.kt
@@ -0,0 +1,37 @@
+package otus.gpb.homework.fragments
+
+import android.graphics.Color
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+private const val COLOR_ARG = "color_arg"
+
+class FragmentAB : Fragment() {
+
+ private fun getBackgroundColor() = arguments?.getInt(COLOR_ARG) ?: Color.WHITE
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(R.layout.fragment_ab, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ view.setBackgroundColor(getBackgroundColor())
+ }
+
+ companion object {
+ fun newInstance(color: Int): FragmentAB {
+ fun setBundleArgument () = Bundle().apply { putInt(COLOR_ARG, color) }
+ return FragmentAB().apply {
+ arguments = setBundleArgument()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/fragments/FragmentB.kt b/app/src/main/java/otus/gpb/homework/fragments/FragmentB.kt
new file mode 100644
index 0000000..244042c
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentB.kt
@@ -0,0 +1,31 @@
+package otus.gpb.homework.fragments
+
+import android.content.res.Configuration
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+
+class FragmentB : Fragment() {
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ childFragmentManager.beginTransaction()
+ .replace(R.id.fragment_ba, FragmentBA())
+ .replace(R.id.fragment_bb, FragmentBB())
+ .addToBackStack(null)
+ .commit()
+ return inflater.inflate(R.layout.activity_b_land, container, false)
+ } else {
+ childFragmentManager.beginTransaction()
+ .replace(R.id.activity_b, FragmentBA())
+ .addToBackStack(null)
+ .commit()
+ return inflater.inflate(R.layout.activity_b, container, false)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/fragments/FragmentBA.kt b/app/src/main/java/otus/gpb/homework/fragments/FragmentBA.kt
new file mode 100644
index 0000000..1faf6a3
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentBA.kt
@@ -0,0 +1,46 @@
+package otus.gpb.homework.fragments
+
+import android.content.res.Configuration
+import android.graphics.Color
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import com.google.android.material.button.MaterialButton
+
+private const val COLOR_ARG = "color_arg"
+private const val FRAGMENT_REQUESTED_COLOR = "fr_req_color"
+
+class FragmentBA : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(R.layout.fragment_ba, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ parentFragmentManager.setFragmentResultListener(FRAGMENT_REQUESTED_COLOR, this) { _, bundle ->
+ val backgroundColor = bundle.getInt(COLOR_ARG, Color.WHITE)
+ view.setBackgroundColor(backgroundColor)
+ }
+
+ val openBbBtn = view.findViewById(R.id.fragment_bb_btn)
+
+ if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
+ openBbBtn.visibility = View.GONE
+ } else {
+ openBbBtn.setOnClickListener {
+ parentFragmentManager.beginTransaction()
+ .replace(R.id.activity_b, FragmentBB())
+ .addToBackStack(null)
+ .commit()
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/fragments/FragmentBB.kt b/app/src/main/java/otus/gpb/homework/fragments/FragmentBB.kt
new file mode 100644
index 0000000..60c0fea
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentBB.kt
@@ -0,0 +1,36 @@
+package otus.gpb.homework.fragments
+
+import android.content.res.Configuration
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import com.google.android.material.button.MaterialButton
+
+private const val COLOR_ARG = "color_arg"
+private const val FRAGMENT_REQUESTED_COLOR = "fr_req_color"
+
+class FragmentBB : Fragment() {
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ return inflater.inflate(R.layout.fragment_bb, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ view.findViewById(R.id.send_color_btn).setOnClickListener {
+ val result = Bundle().apply { putInt(COLOR_ARG, ColorGenerator.generateColor()) }
+ parentFragmentManager.setFragmentResult(FRAGMENT_REQUESTED_COLOR, result)
+
+ if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
+ parentFragmentManager.popBackStack()
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/fragments/MainActivity.kt b/app/src/main/java/otus/gpb/homework/fragments/MainActivity.kt
index 5e89c44..9883330 100644
--- a/app/src/main/java/otus/gpb/homework/fragments/MainActivity.kt
+++ b/app/src/main/java/otus/gpb/homework/fragments/MainActivity.kt
@@ -1,12 +1,22 @@
package otus.gpb.homework.fragments
+import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import com.google.android.material.button.MaterialButton
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
+
+ findViewById(R.id.activity_a_btn).setOnClickListener {
+ startActivity(Intent(this, ActivityA::class.java))
+ }
+
+ findViewById(R.id.activity_b_btn).setOnClickListener {
+ startActivity(Intent(this, ActivityB::class.java))
+ }
}
-}
\ No newline at end of file
+}
diff --git a/app/src/main/res/layout-land/activity_b_land.xml b/app/src/main/res/layout-land/activity_b_land.xml
new file mode 100644
index 0000000..15a4d81
--- /dev/null
+++ b/app/src/main/res/layout-land/activity_b_land.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_a.xml b/app/src/main/res/layout/activity_a.xml
new file mode 100644
index 0000000..36d5b37
--- /dev/null
+++ b/app/src/main/res/layout/activity_a.xml
@@ -0,0 +1,8 @@
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_b.xml b/app/src/main/res/layout/activity_b.xml
new file mode 100644
index 0000000..0989962
--- /dev/null
+++ b/app/src/main/res/layout/activity_b.xml
@@ -0,0 +1,6 @@
+
+
+
\ 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 17eab17..e23a813 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -6,13 +6,23 @@
android:layout_height="match_parent"
tools:context=".MainActivity">
-
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_a.xml b/app/src/main/res/layout/fragment_a.xml
new file mode 100644
index 0000000..aab9348
--- /dev/null
+++ b/app/src/main/res/layout/fragment_a.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_aa.xml b/app/src/main/res/layout/fragment_aa.xml
new file mode 100644
index 0000000..5e82500
--- /dev/null
+++ b/app/src/main/res/layout/fragment_aa.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_ab.xml b/app/src/main/res/layout/fragment_ab.xml
new file mode 100644
index 0000000..7625bec
--- /dev/null
+++ b/app/src/main/res/layout/fragment_ab.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_ba.xml b/app/src/main/res/layout/fragment_ba.xml
new file mode 100644
index 0000000..fbc0d03
--- /dev/null
+++ b/app/src/main/res/layout/fragment_ba.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_bb.xml b/app/src/main/res/layout/fragment_bb.xml
new file mode 100644
index 0000000..3cd85df
--- /dev/null
+++ b/app/src/main/res/layout/fragment_bb.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 34277aa..3d63ff3 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,14 @@
Fragments
+ open Activity A
+ open Activity B
+ Fragment A
+ Fragment AA
+ Fragment AB
+ Fragment BA
+ Fragment BB
+ open Fragment AB
+ open Fragment AA
+ open Fragment BB
+ Send color
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..d103b11
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,6 @@
+
+
+
+
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
index bd20018..598d925 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
- id 'com.android.application' version '8.7.2' apply false
- id 'com.android.library' version '8.7.2' apply false
+ id 'com.android.application' version '8.12.3' apply false
+ id 'com.android.library' version '8.12.3' apply false
id 'org.jetbrains.kotlin.android' version '2.0.21' apply false
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 1f1d072..f464719 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Tue Nov 05 08:41:56 CET 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists