From 6e4110bb888c15838bc8a3919e9f210527ea0bfb Mon Sep 17 00:00:00 2001 From: atuzhilov Date: Sat, 11 Jan 2025 15:14:55 +0300 Subject: [PATCH] ActivityA, ActivityB, fragments layouts and classes have been added --- app/src/main/AndroidManifest.xml | 6 +++ .../otus/gpb/homework/fragments/ActivityA.kt | 17 ++++++ .../otus/gpb/homework/fragments/ActivityB.kt | 17 ++++++ .../otus/gpb/homework/fragments/FragmentA.kt | 54 +++++++++++++++++++ .../otus/gpb/homework/fragments/FragmentAA.kt | 41 ++++++++++++++ .../otus/gpb/homework/fragments/FragmentAB.kt | 37 +++++++++++++ .../otus/gpb/homework/fragments/FragmentB.kt | 31 +++++++++++ .../otus/gpb/homework/fragments/FragmentBA.kt | 46 ++++++++++++++++ .../otus/gpb/homework/fragments/FragmentBB.kt | 35 ++++++++++++ .../gpb/homework/fragments/MainActivity.kt | 12 ++++- app/src/main/res/layout/activity_a.xml | 8 +++ app/src/main/res/layout/activity_b.xml | 7 +++ app/src/main/res/layout/activity_b_land.xml | 26 +++++++++ app/src/main/res/layout/activity_main.xml | 15 +++++- app/src/main/res/layout/fragment_a.xml | 40 ++++++++++++++ app/src/main/res/layout/fragment_aa.xml | 34 ++++++++++++ app/src/main/res/layout/fragment_ab.xml | 13 +++++ app/src/main/res/layout/fragment_ba.xml | 34 ++++++++++++ app/src/main/res/layout/fragment_bb.xml | 34 ++++++++++++ app/src/main/res/values/strings.xml | 11 ++++ app/src/main/res/values/styles.xml | 6 +++ local 2.properties | 8 +++ 22 files changed, 529 insertions(+), 3 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/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/activity_a.xml create mode 100644 app/src/main/res/layout/activity_b.xml create mode 100644 app/src/main/res/layout/activity_b_land.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 create mode 100644 app/src/main/res/values/styles.xml create mode 100644 local 2.properties 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..c8a510d --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt @@ -0,0 +1,17 @@ +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) + + if (savedInstanceState == null) { + supportFragmentManager.beginTransaction() + .replace(R.id.activity_a_fl, FragmentA()) + .commit() + } + } +} 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..522d8e9 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt @@ -0,0 +1,17 @@ +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) + + if (savedInstanceState == null) { + supportFragmentManager.beginTransaction() + .replace(R.id.activity_b_fl, FragmentB()) + .commit() + } + } +} 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..94fd7a4 --- /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_fl, FragmentAA.newInstance(generateBackgroundColor())) + .addToBackStack(null) + .commit() + } + } + + fun createFragmentB() { + childFragmentManager.beginTransaction() + .replace(R.id.fragment_aa_fl, FragmentAB.newInstance(generateBackgroundColor())) + .addToBackStack(null) + .commit() + } +} 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..2d2f3cb --- /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 = "" + +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).createFragmentB() + } + } + + companion object { + fun newInstance(color: Int): FragmentAA { + fun setBundleArgument() = Bundle().apply { putInt(COLOR_ARG, color) } + return FragmentAA().apply { + arguments = setBundleArgument() + } + } + } +} 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..e0bee0c --- /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 = "" + +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() + } + } + } +} 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..81b7f74 --- /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_fl, FragmentBA()) + .replace(R.id.fragment_bb_fl, FragmentBB()) + .addToBackStack(null) + .commit() + return inflater.inflate(R.layout.activity_b_land, container, false) + } else { + childFragmentManager.beginTransaction() + .replace(R.id.activity_b_fl, FragmentBA()) + .addToBackStack(null) + .commit() + return inflater.inflate(R.layout.activity_b, container, false) + } + } +} 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..79d61ed --- /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 = "" +private const val REQUESTED_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(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_fl, FragmentBB()) + .addToBackStack(null) + .commit() + } + } + } +} 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..8ef0c3b --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentBB.kt @@ -0,0 +1,35 @@ +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 = "" +private const val REQUESTED_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 { + if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { + parentFragmentManager.popBackStack() + } + val result = Bundle().apply { putInt(COLOR_ARG, ColorGenerator.generateColor()) } + parentFragmentManager.setFragmentResult(REQUESTED_COLOR, result) + } + + } +} 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/activity_a.xml b/app/src/main/res/layout/activity_a.xml new file mode 100644 index 0000000..32503f9 --- /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..1952f21 --- /dev/null +++ b/app/src/main/res/layout/activity_b.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_b_land.xml b/app/src/main/res/layout/activity_b_land.xml new file mode 100644 index 0000000..a64e124 --- /dev/null +++ b/app/src/main/res/layout/activity_b_land.xml @@ -0,0 +1,26 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 17eab17..5faacf3 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -6,13 +6,24 @@ 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..99a6fd5 --- /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/local 2.properties b/local 2.properties new file mode 100644 index 0000000..08cf10b --- /dev/null +++ b/local 2.properties @@ -0,0 +1,8 @@ +## This file must *NOT* be checked into Version Control Systems, +# as it contains information specific to your local configuration. +# +# Location of the SDK. This is only used by Gradle. +# For customization when using a Version Control System, please read the +# header note. +#Tue Jan 07 14:21:36 MSK 2025 +sdk.dir=/Users/atuzhilov/Library/Android/sdk