diff --git a/app/build.gradle b/app/build.gradle
index c5cf1b8..5ed27e0 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -34,6 +34,9 @@ android {
kotlinOptions {
jvmTarget = '17'
}
+ buildFeatures {
+ viewBinding = true
+ }
}
dependencies {
@@ -45,4 +48,5 @@ dependencies {
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+ implementation 'androidx.activity:activity:1.9.3'
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 9604b34..bee542a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,12 +12,17 @@
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..25f08fa
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt
@@ -0,0 +1,29 @@
+package otus.gpb.homework.fragments
+
+import android.os.Bundle
+import android.window.OnBackInvokedDispatcher
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import otus.gpb.homework.fragments.databinding.ActivityABinding
+import otus.gpb.homework.fragments.databinding.ActivityMainBinding
+import otus.gpb.homework.fragments.fragments.FragmentA
+
+class ActivityA : AppCompatActivity() {
+ private lateinit var binding: ActivityABinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ binding = ActivityABinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ if (savedInstanceState == null) {
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.fragmentContainerA, FragmentA(), "FragmentA")
+ .addToBackStack(null)
+ .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..2e22493
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt
@@ -0,0 +1,46 @@
+package otus.gpb.homework.fragments
+
+import android.content.res.Configuration
+import android.os.Bundle
+import androidx.activity.enableEdgeToEdge
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.isVisible
+import otus.gpb.homework.fragments.databinding.ActivityBBinding
+import otus.gpb.homework.fragments.fragments.FragmentBA
+import otus.gpb.homework.fragments.fragments.FragmentBB
+
+class ActivityB : AppCompatActivity() {
+
+ private lateinit var binding: ActivityBBinding
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ enableEdgeToEdge()
+ binding = ActivityBBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ supportFragmentManager.beginTransaction()
+ .replace(R.id.fragmentContainerBA, FragmentBA())
+ .replace(R.id.fragmentContainerBB, FragmentBB())
+ .commit()
+
+ switchFragments()
+ }
+
+ private fun switchFragments() {
+
+ val currentOrientation = resources.configuration.orientation
+ if (currentOrientation == Configuration.ORIENTATION_PORTRAIT) {
+ with(binding) {
+ fragmentContainerBA.isVisible = true
+ fragmentContainerBB.isVisible = false
+ }
+
+ } else {
+ with(binding) {
+ fragmentContainerBA.isVisible = true
+ fragmentContainerBB.isVisible = true
+ }
+ }
+ }
+}
\ 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..b7296fe
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt
@@ -0,0 +1,52 @@
+package otus.gpb.homework.fragments.fragments
+
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.activity.OnBackPressedCallback
+import androidx.fragment.app.Fragment
+import otus.gpb.homework.fragments.ColorGenerator
+import otus.gpb.homework.fragments.R
+import otus.gpb.homework.fragments.databinding.ActivityMainBinding
+import otus.gpb.homework.fragments.databinding.FragmentABinding
+
+private const val KEY = "color"
+class FragmentA : Fragment( ) {
+
+ private lateinit var binding: FragmentABinding
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ binding = FragmentABinding.inflate(inflater, container, false)
+ binding.openFragmentAA.isEnabled = true
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+
+ val bundle = Bundle()
+ bundle.putInt(KEY, ColorGenerator.generateColor())
+ val fragmentAA = FragmentAA()
+ fragmentAA.arguments = bundle
+
+ binding.openFragmentAA.setOnClickListener {
+ childFragmentManager.beginTransaction()
+ .add(R.id.fragmentContainerAA, fragmentAA)
+ .addToBackStack("fragmentA")
+ .commit()
+ binding.openFragmentAA.isEnabled = false
+ }
+
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ activity?.finish()
+ }
+ }
+ requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)
+ }
+}
\ 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..61ee84a
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt
@@ -0,0 +1,55 @@
+package otus.gpb.homework.fragments.fragments
+
+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
+import otus.gpb.homework.fragments.ColorGenerator
+import otus.gpb.homework.fragments.R
+import otus.gpb.homework.fragments.databinding.FragmentAaBinding
+
+
+private const val KEY = "color"
+class FragmentAA : Fragment() {
+
+ private lateinit var binding: FragmentAaBinding
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ binding = FragmentAaBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val color = arguments?.getInt(KEY)
+ if (color != null) {
+ this.view?.setBackgroundColor(color)
+ }
+
+ val bundle = Bundle()
+ bundle.putInt(KEY, ColorGenerator.generateColor())
+ val fragmentAB = FragmentAB()
+ fragmentAB.arguments = bundle
+
+ binding.openFragmentAB.setOnClickListener {
+ parentFragmentManager.beginTransaction()
+ .replace(R.id.fragmentContainerAB, fragmentAB)
+ .addToBackStack("fragmentAA")
+ .commit()
+ }
+
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ parentFragmentManager.popBackStack()
+ }
+ }
+ requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)
+ }
+}
\ 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..eddd8e2
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentAB.kt
@@ -0,0 +1,25 @@
+package otus.gpb.homework.fragments.fragments
+
+import android.os.Bundle
+import android.view.View
+import androidx.activity.OnBackPressedCallback
+import androidx.fragment.app.Fragment
+import otus.gpb.homework.fragments.R
+private const val KEY = "color"
+class FragmentAB : Fragment(R.layout.fragment_ab) {
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ val color = arguments?.getInt(KEY)
+
+ if (color != null) {
+ this.view?.setBackgroundColor(color)
+ }
+
+ val callback = object : OnBackPressedCallback(true) {
+ override fun handleOnBackPressed() {
+ parentFragmentManager.popBackStack("fragmentAA", 1)
+ }
+ }
+ requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)
+ }
+}
\ 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..8808be3
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentB.kt
@@ -0,0 +1,6 @@
+package otus.gpb.homework.fragments.fragments
+
+import androidx.fragment.app.Fragment
+import otus.gpb.homework.fragments.R
+
+class FragmentB : Fragment(R.layout.fragment_b)
\ 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..1497536
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentBA.kt
@@ -0,0 +1,49 @@
+package otus.gpb.homework.fragments.fragments
+
+import android.content.res.Configuration
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import androidx.core.view.isVisible
+import androidx.fragment.app.Fragment
+import otus.gpb.homework.fragments.R
+import otus.gpb.homework.fragments.databinding.FragmentABinding
+import otus.gpb.homework.fragments.databinding.FragmentBaBinding
+
+private const val KEY = "color"
+private const val REQUEST_KEY = "colorBundle"
+class FragmentBA : Fragment() {
+
+ private lateinit var binding: FragmentBaBinding
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ binding = FragmentBaBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ parentFragmentManager.setFragmentResultListener(REQUEST_KEY, this) { _, bundle ->
+ val color = bundle.getInt(KEY)
+ this.view?.setBackgroundColor(color)
+ }
+
+ with(binding.openFragmentBB) {
+
+ setOnClickListener {
+ parentFragmentManager.beginTransaction()
+ .replace(R.id.fragmentContainerBA, FragmentBB())
+ .commit()
+ }
+ val currentOrientation = resources.configuration.orientation
+ isVisible = currentOrientation == Configuration.ORIENTATION_PORTRAIT
+ }
+ }
+}
\ 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..dfee6d3
--- /dev/null
+++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentBB.kt
@@ -0,0 +1,45 @@
+package otus.gpb.homework.fragments.fragments
+
+import android.content.res.Configuration
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.Button
+import androidx.fragment.app.Fragment
+import otus.gpb.homework.fragments.ColorGenerator
+import otus.gpb.homework.fragments.R
+import otus.gpb.homework.fragments.databinding.FragmentBbBinding
+
+private const val KEY = "color"
+private const val REQUEST_KEY = "colorBundle"
+class FragmentBB : Fragment(R.layout.fragment_bb) {
+
+ private lateinit var binding: FragmentBbBinding
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ binding = FragmentBbBinding.inflate(inflater, container, false)
+ return binding.root
+ }
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ binding.sendColor.setOnClickListener {
+ val bundle = Bundle()
+ bundle.putInt(KEY, ColorGenerator.generateColor())
+
+ parentFragmentManager.setFragmentResult(REQUEST_KEY, bundle)
+
+ val currentOrientation = resources.configuration.orientation
+ if (currentOrientation == Configuration.ORIENTATION_PORTRAIT) {
+ parentFragmentManager.beginTransaction()
+ .add(R.id.fragmentContainerBA, FragmentBA())
+ .commit()
+ }
+ }
+ }
+}
\ 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..8c67384 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,27 @@
package otus.gpb.homework.fragments
+import android.content.Intent
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
+import otus.gpb.homework.fragments.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
+ private lateinit var binding: ActivityMainBinding
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- setContentView(R.layout.activity_main)
+
+ binding = ActivityMainBinding.inflate(layoutInflater)
+ setContentView(binding.root)
+
+ binding.openActivityA.setOnClickListener {
+ startActivity(Intent(this, ActivityA::class.java))
+ }
+
+ binding.openActivityB.setOnClickListener {
+ startActivity(Intent(this, ActivityB::class.java))
+ }
}
-}
\ 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..9fc8b56
--- /dev/null
+++ b/app/src/main/res/layout/activity_a.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
\ 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..f6c3fea
--- /dev/null
+++ b/app/src/main/res/layout/activity_b.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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..59de17f 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -4,15 +4,23 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:padding="20dp"
tools:context=".MainActivity">
-
+ app:layout_constraintStart_toStartOf="parent" />
+
+
\ 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..fe31524
--- /dev/null
+++ b/app/src/main/res/layout/fragment_a.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ 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..09472eb
--- /dev/null
+++ b/app/src/main/res/layout/fragment_aa.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
\ 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..49e17f1
--- /dev/null
+++ b/app/src/main/res/layout/fragment_ab.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_b.xml b/app/src/main/res/layout/fragment_b.xml
new file mode 100644
index 0000000..ab23bbf
--- /dev/null
+++ b/app/src/main/res/layout/fragment_b.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
\ 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..75cf94c
--- /dev/null
+++ b/app/src/main/res/layout/fragment_ba.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ 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..d2a4969
--- /dev/null
+++ b/app/src/main/res/layout/fragment_bb.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
\ 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..05a8be4 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,21 @@
Fragments
+
+ Hello blank fragment
+ Fragment AA
+ Fragment AB
+ Fragment BB
+ Fragment BA
+ Main Activity!
+ Open Activity A
+ Open Activity B
+ Activity A
+ Activity B
+ Fragment A
+ Fragment B
+ Open fragment AA
+ Open fragment A
+ Open fragment AB
+ Open Fragment BB
+ send Color
\ No newline at end of file