From 4e4920fd0b1a15d6c55898ef8a90f86bc553ed1f Mon Sep 17 00:00:00 2001 From: iamwhoiam0 Date: Sat, 28 Jun 2025 16:08:36 +0300 Subject: [PATCH] homework is done --- app/build.gradle | 6 +- app/src/main/AndroidManifest.xml | 6 ++ .../gpb/homework/fragments/ActivityOne.kt | 23 +++++ .../gpb/homework/fragments/ActivityTwo.kt | 23 +++++ .../otus/gpb/homework/fragments/FragmentA.kt | 57 ++++++++++++ .../otus/gpb/homework/fragments/FragmentAA.kt | 55 ++++++++++++ .../otus/gpb/homework/fragments/FragmentAB.kt | 45 ++++++++++ .../otus/gpb/homework/fragments/FragmentB.kt | 89 +++++++++++++++++++ .../otus/gpb/homework/fragments/FragmentBA.kt | 75 ++++++++++++++++ .../otus/gpb/homework/fragments/FragmentBB.kt | 72 +++++++++++++++ .../gpb/homework/fragments/MainActivity.kt | 16 +++- app/src/main/res/layout-land/fragment_b.xml | 21 +++++ app/src/main/res/layout/activity_main.xml | 22 ++++- app/src/main/res/layout/activity_one.xml | 13 +++ app/src/main/res/layout/activity_two.xml | 13 +++ app/src/main/res/layout/fragment_a.xml | 39 ++++++++ app/src/main/res/layout/fragment_a_a.xml | 29 ++++++ app/src/main/res/layout/fragment_a_b.xml | 18 ++++ app/src/main/res/layout/fragment_b.xml | 13 +++ app/src/main/res/layout/fragment_b_a.xml | 25 ++++++ app/src/main/res/layout/fragment_b_b.xml | 24 +++++ app/src/main/res/values-land/booleans.xml | 4 + app/src/main/res/values/booleans.xml | 4 + app/src/main/res/values/strings.xml | 2 + 24 files changed, 688 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/otus/gpb/homework/fragments/ActivityOne.kt create mode 100644 app/src/main/java/otus/gpb/homework/fragments/ActivityTwo.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/FragmentB.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/res/layout-land/fragment_b.xml create mode 100644 app/src/main/res/layout/activity_one.xml create mode 100644 app/src/main/res/layout/activity_two.xml create mode 100644 app/src/main/res/layout/fragment_a.xml create mode 100644 app/src/main/res/layout/fragment_a_a.xml create mode 100644 app/src/main/res/layout/fragment_a_b.xml create mode 100644 app/src/main/res/layout/fragment_b.xml create mode 100644 app/src/main/res/layout/fragment_b_a.xml create mode 100644 app/src/main/res/layout/fragment_b_b.xml create mode 100644 app/src/main/res/values-land/booleans.xml create mode 100644 app/src/main/res/values/booleans.xml diff --git a/app/build.gradle b/app/build.gradle index c5cf1b8..64ccb51 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -8,7 +8,7 @@ kotlin { } android { - compileSdk 34 + compileSdk 35 namespace "otus.gpb.homework.fragments" defaultConfig { @@ -34,6 +34,9 @@ android { kotlinOptions { jvmTarget = '17' } + viewBinding { + enabled = true + } } dependencies { @@ -42,6 +45,7 @@ dependencies { 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.activity:activity:1.10.1' testImplementation 'junit:junit:4.13.2' androidTestImplementation 'androidx.test.ext:junit:1.1.3' androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9604b34..0e03e51 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/ActivityOne.kt b/app/src/main/java/otus/gpb/homework/fragments/ActivityOne.kt new file mode 100644 index 0000000..5c27090 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityOne.kt @@ -0,0 +1,23 @@ +package otus.gpb.homework.fragments + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class ActivityOne : AppCompatActivity() { + + private lateinit var fragmentA: FragmentA + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_one) + + fragmentA = FragmentA() + supportFragmentManager.beginTransaction() + .replace(R.id.fragmentAContainer, fragmentA) + .commit() + } +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/fragments/ActivityTwo.kt b/app/src/main/java/otus/gpb/homework/fragments/ActivityTwo.kt new file mode 100644 index 0000000..e6ecb26 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityTwo.kt @@ -0,0 +1,23 @@ +package otus.gpb.homework.fragments + +import android.os.Bundle +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class ActivityTwo : AppCompatActivity() { + + private lateinit var fragmentB: FragmentB + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_two) + + fragmentB = FragmentB() + supportFragmentManager.beginTransaction() + .replace(R.id.fragmentBContainer, 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..100366f --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt @@ -0,0 +1,57 @@ +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 androidx.activity.OnBackPressedCallback +import otus.gpb.homework.fragments.databinding.FragmentABinding + +class FragmentA : Fragment() { + + private lateinit var fragmentAA: FragmentAA + private lateinit var binding: FragmentABinding + + 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 { + // Inflate the layout for this fragment + binding = FragmentABinding.inflate(layoutInflater) + return binding.root + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + binding.transitionToFragmentAA.setOnClickListener { + val generatedColor = ColorGenerator.generateColor() + fragmentAA = FragmentAA.newInstance(generatedColor) + childFragmentManager.beginTransaction() + .replace(R.id.fragment_a_container, fragmentAA) + .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..d66f312 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt @@ -0,0 +1,55 @@ +package otus.gpb.homework.fragments + +import android.os.Bundle +import android.util.Log +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button + +class FragmentAA : Fragment() { + + private var randomColor: Int = 0 + private lateinit var fragmentAB: FragmentAB + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + arguments?.let { + randomColor = it.getInt(ARG_RAND_COLOR) + } + Log.i("myColor", randomColor.toString()) + } + + 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) + view.setBackgroundColor(randomColor) + fragmentAB = FragmentAB.newInstance(ColorGenerator.generateColor()) + view.findViewById