diff --git a/app/build.gradle b/app/build.gradle
index 76296ec..d95a89c 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,16 +4,19 @@ plugins {
}
android {
- compileSdk 32
+ compileSdk 34
defaultConfig {
applicationId "otus.gpb.homework.fragments"
minSdk 23
- targetSdk 32
+ targetSdk 34
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ vectorDrawables {
+ useSupportLibrary true
+ }
}
buildTypes {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index aed2b09..1d8b5e1 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -13,6 +13,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.Fragments"
tools:targetApi="31">
+
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..e7e97e6
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt
@@ -0,0 +1,56 @@
+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 android.widget.Button
+import androidx.activity.OnBackPressedCallback
+import androidx.fragment.app.Fragment
+
+
+class FragmentA : Fragment() {
+ private lateinit var buttonOpenFragmentAA: Button
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+ return inflater.inflate(R.layout.fragment_a, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ buttonOpenFragmentAA = view.findViewById(R.id.buttonOpenFragmentAA)
+ buttonOpenFragmentAA.setOnClickListener {
+ childFragmentManager.beginTransaction()
+ .replace(R.id.container_aa, FragmentAA.newInstance(ColorGenerator.generateColor()))
+ .addToBackStack("fragmentA")
+ .commit()
+ buttonOpenFragmentAA.visibility = View.GONE
+ }
+ }
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ if (childFragmentManager.backStackEntryCount > 0) {
+ childFragmentManager.popBackStack()
+ } else {
+ isEnabled = true
+ requireActivity().finish()
+ }
+ }
+ }
+ requireActivity().onBackPressedDispatcher.addCallback(this, callback)
+
+ childFragmentManager.addOnBackStackChangedListener {
+ if (childFragmentManager.backStackEntryCount == 0) {
+ buttonOpenFragmentAA.visibility = View.VISIBLE
+ }
+ }
+ }
+}
\ 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..db64cd1
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt
@@ -0,0 +1,97 @@
+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 android.widget.Button
+import androidx.activity.OnBackPressedCallback
+import androidx.fragment.app.Fragment
+
+
+private const val KEY_COLOR = "color"
+
+
+/**
+ * A simple [Fragment] subclass.
+ * Use the [FragmentAA.newInstance] factory method to
+ * create an instance of this fragment.
+ */
+class FragmentAA : Fragment() {
+
+ private var color: Int? = null
+ private lateinit var buttonOpenFragmentAB: Button
+
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ arguments?.let {
+ color = it.getInt(KEY_COLOR)
+ }
+
+
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater, container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ // Inflate the layout for this fragment
+
+ return inflater.inflate(R.layout.fragment_a_a, container, false)
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ val colorHex = color
+ if (colorHex != null) {
+ view.setBackgroundColor(colorHex)
+ }
+
+ buttonOpenFragmentAB = view.findViewById(R.id.buttonOpenFragmentAB)
+ buttonOpenFragmentAB.setOnClickListener {
+ parentFragmentManager.beginTransaction()
+ .replace(R.id.container_aa, FragmentAA.newInstance(ColorGenerator.generateColor()))
+ .addToBackStack("fragmentA")
+ .commit()
+ buttonOpenFragmentAB.visibility = View.GONE
+ }
+
+ }
+
+ override fun onAttach(context: Context) {
+ super.onAttach(context)
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ if (parentFragmentManager.backStackEntryCount > 0) {
+ parentFragmentManager.popBackStack()
+ } else {
+ isEnabled = false
+ parentFragmentManager.beginTransaction().remove(this@FragmentAA)
+ .commitAllowingStateLoss()
+ }
+ }
+ }
+ requireActivity().onBackPressedDispatcher.addCallback(this, callback)
+ }
+
+ companion object {
+ /**
+ * Use this factory method to create a new instance of
+ * this fragment using the provided parameters.
+ *
+ * @param color Parameter 1.
+ * @return A new instance of fragment FragmentAA.
+ */
+
+ @JvmStatic
+ fun newInstance(color: Int) =
+ FragmentAA().apply {
+ arguments = Bundle().apply {
+ putInt(KEY_COLOR, color)
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/fragments/FragmentBActivity.kt b/app/src/main/java/otus/gpb/homework/fragments/FragmentBActivity.kt
new file mode 100644
index 0000000..099a984
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentBActivity.kt
@@ -0,0 +1,39 @@
+package otus.gpb.homework.fragments
+
+import android.content.res.Configuration
+import android.os.Bundle
+import androidx.appcompat.app.AppCompatActivity
+import otus.gpb.homework.fragments.ui.FragmentBA
+import otus.gpb.homework.fragments.ui.FragmentBB
+
+class FragmentBActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_fragment_b)
+
+ val fragmentBA = FragmentBA()
+ val fragmentBB = FragmentBB()
+
+ val orientation = resources.configuration.orientation
+ if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
+// supportFragmentManager.beginTransaction().add(R.id.fragment_container_ba, fragmentBA)
+// .commit()
+// supportFragmentManager.beginTransaction().add(R.id.fragment_container_bb, fragmentBB)
+// .commit()
+
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.fragment_container_ba, fragmentBA)
+ .replace(R.id.fragment_container_bb, fragmentBB)
+ .commit()
+ }
+ if (orientation == Configuration.ORIENTATION_PORTRAIT) {
+ supportFragmentManager.beginTransaction().add(R.id.activity_fragment_b, fragmentBA)
+ .commit()
+ }
+ }
+
+ companion object {
+ const val KEY_COLOR = "color"
+ const val KEY_REQUEST = "request_key"
+ }
+}
\ 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..6f5e868 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,42 @@
package otus.gpb.homework.fragments
+import android.content.Intent
import android.os.Bundle
+import android.view.View
+import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
class MainActivity : AppCompatActivity() {
+ private lateinit var buttonFragmentA: Button
+ private lateinit var buttonFragmentB: Button
+ private lateinit var fragmentA: FragmentA
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
+
+ buttonFragmentA = findViewById(R.id.button_fragment_a)
+ buttonFragmentB = findViewById(R.id.button_fragment_b)
+
+ buttonFragmentA.setOnClickListener {
+ fragmentA = FragmentA()
+ supportFragmentManager.beginTransaction()
+ .add(R.id.fragment_container, fragmentA)
+ .commit()
+ buttonFragmentA.visibility = View.GONE
+ buttonFragmentB.visibility = View.GONE
+ }
+
+ buttonFragmentB.setOnClickListener {
+ startActivity(Intent(this, FragmentBActivity::class.java))
+ }
+
+ supportFragmentManager.addOnBackStackChangedListener {
+ val count = supportFragmentManager.backStackEntryCount
+ if (count == 0) {
+ buttonFragmentA.visibility = View.VISIBLE
+ buttonFragmentB.visibility = View.VISIBLE
+ }
+ }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/fragments/ui/FragmentBA.kt b/app/src/main/java/otus/gpb/homework/fragments/ui/FragmentBA.kt
new file mode 100644
index 0000000..5e1fafe
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/ui/FragmentBA.kt
@@ -0,0 +1,39 @@
+package otus.gpb.homework.fragments.ui
+
+import android.content.res.Configuration
+import android.os.Bundle
+import android.view.View
+import android.widget.Button
+import androidx.fragment.app.Fragment
+import otus.gpb.homework.fragments.FragmentBActivity
+import otus.gpb.homework.fragments.R
+
+
+class FragmentBA : Fragment(R.layout.fragment_b_a) {
+
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ requireActivity().supportFragmentManager.setFragmentResultListener(
+ FragmentBActivity.KEY_REQUEST,
+ this
+ ) { _, bundle ->
+ val result = bundle.getInt(FragmentBActivity.KEY_COLOR)
+ view.setBackgroundColor(result)
+ }
+
+ val orientation = resources.configuration.orientation
+ val button = view.findViewById