diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9604b34..cc691a7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,8 +12,15 @@ android:supportsRtl="true" android:theme="@style/Theme.Fragments" tools:targetApi="31"> + + diff --git a/app/src/main/java/otus/gpb/homework/fragments/FirstActivity.kt b/app/src/main/java/otus/gpb/homework/fragments/FirstActivity.kt new file mode 100644 index 0000000..134cfa8 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FirstActivity.kt @@ -0,0 +1,16 @@ +package otus.gpb.homework.fragments + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity + +class FirstActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_first) + + supportFragmentManager + .beginTransaction() + .add(R.id.container, FragmentA()) + .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..ee943ee --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentA.kt @@ -0,0 +1,60 @@ +package otus.gpb.homework.fragments + +import android.content.Context +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE +import android.view.ViewGroup +import android.widget.Button +import androidx.activity.OnBackPressedCallback +import androidx.core.os.bundleOf +import androidx.fragment.app.Fragment + +class FragmentA : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_a, container, false) + } + + private lateinit var button: Button + + override fun onAttach(context: Context) { + super.onAttach(context) + val callback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (childFragmentManager.backStackEntryCount == 1) { + activity?.title = getString(R.string.fragment_a) + button.visibility = VISIBLE + } + if (childFragmentManager.backStackEntryCount >= 1) { + childFragmentManager.popBackStack() + } else { + requireActivity().finish() + } + } + } + requireActivity().onBackPressedDispatcher.addCallback(this, callback) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + activity?.title = getString(R.string.fragment_a) + + button = view.findViewById(R.id.button_aa) + button.setOnClickListener { + button.visibility = GONE + childFragmentManager + .beginTransaction() + .replace(R.id.container, FragmentAA().apply { + arguments = bundleOf(KEY_COLOR to ColorGenerator.generateColor()) + }) + .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..fdda28e --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentAA.kt @@ -0,0 +1,37 @@ +package otus.gpb.homework.fragments + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.Button +import androidx.core.os.bundleOf + +class FragmentAA : Fragment() { + private lateinit var button: Button + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_a_a, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + activity?.title = getString(R.string.fragment_aa) + + view.setBackgroundColor(requireArguments().getInt(KEY_COLOR)) + button = view.findViewById(R.id.button_a_b) + button.setOnClickListener { + parentFragmentManager + .beginTransaction() + .replace(R.id.container, FragmentAB().apply { + arguments = bundleOf(KEY_COLOR to ColorGenerator.generateColor()) + }) + .addToBackStack(null) + .commit() + } + } +} \ 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..24a06fd --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentAB.kt @@ -0,0 +1,24 @@ +package otus.gpb.homework.fragments + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup + +class FragmentAB : Fragment() { + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_a_b, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + activity?.title = getString(R.string.fragment_ab) + + view.setBackgroundColor(requireArguments().getInt(KEY_COLOR)) + } +} \ 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..597d7d1 --- /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.ORIENTATION_LANDSCAPE +import android.content.res.Configuration.ORIENTATION_PORTRAIT +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE +import android.view.ViewGroup +import android.widget.Button +import android.widget.FrameLayout +import androidx.fragment.app.Fragment + +class FragmentBA : Fragment() { + private lateinit var button: Button + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_b_a, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val orientation = resources.configuration.orientation + view.setBackgroundColor(requireArguments().getInt(KEY_COLOR)) + + button = view.findViewById(R.id.button_bb) + if (orientation == ORIENTATION_PORTRAIT) { + requireActivity().findViewById(R.id.container_ba).visibility = VISIBLE + requireActivity().findViewById(R.id.container_bb).visibility = GONE + button.visibility = VISIBLE + button.setOnClickListener { + parentFragmentManager + .beginTransaction() + .replace(R.id.container_bb, FragmentBB()) + .commit() + } + } else if (orientation == ORIENTATION_LANDSCAPE) { + button.visibility = GONE + } + } + +} \ 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..64c2980 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/FragmentBB.kt @@ -0,0 +1,41 @@ +package otus.gpb.homework.fragments + +import android.content.res.Configuration.ORIENTATION_PORTRAIT +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE +import android.view.ViewGroup +import android.widget.Button +import android.widget.FrameLayout +import androidx.core.os.bundleOf + +class FragmentBB : Fragment() { + private lateinit var button: Button + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + return inflater.inflate(R.layout.fragment_b_b, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + button = view.findViewById(R.id.button_color) + if (resources.configuration.orientation == ORIENTATION_PORTRAIT) { + requireActivity().findViewById(R.id.container_ba).visibility = GONE + requireActivity().findViewById(R.id.container_bb).visibility = VISIBLE + } + button.setOnClickListener { + parentFragmentManager.beginTransaction() + .replace(R.id.container_ba, FragmentBA().apply { + arguments = bundleOf(KEY_COLOR to ColorGenerator.generateColor()) + }) + .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..c4b3c5a 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,28 @@ package otus.gpb.homework.fragments +import android.content.Intent import android.os.Bundle +import android.widget.Button import androidx.appcompat.app.AppCompatActivity + +const val KEY_COLOR = "color" + class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) + + val buttonFirst = findViewById