diff --git a/app/build.gradle b/app/build.gradle index c5cf1b8..fc757c4 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -3,10 +3,6 @@ plugins { id 'org.jetbrains.kotlin.android' } -kotlin { - jvmToolchain(17) -} - android { compileSdk 34 namespace "otus.gpb.homework.fragments" @@ -34,6 +30,9 @@ android { kotlinOptions { jvmTarget = '17' } + viewBinding { + enabled = true + } } dependencies { @@ -42,6 +41,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.9.3' 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..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..87491f3 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityA.kt @@ -0,0 +1,28 @@ +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) + + supportFragmentManager.beginTransaction() + .replace(R.id.fragmentContainer, FragmentA()) + .addToBackStack("FragmentA") + .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..1023342 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ActivityB.kt @@ -0,0 +1,44 @@ +package otus.gpb.homework.fragments + +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() { + + if (ScreenOrientationHelper.getScreenOrientation(resources) == "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/MainActivity.kt b/app/src/main/java/otus/gpb/homework/fragments/MainActivity.kt index 5e89c44..3d02473 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 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) + + with(binding) { + openActivityA.setOnClickListener { + startActivity(Intent(applicationContext, ActivityA::class.java)) + } + openActivityB.setOnClickListener { + startActivity(Intent(applicationContext, ActivityB::class.java)) + } + } } -} \ No newline at end of file +} + diff --git a/app/src/main/java/otus/gpb/homework/fragments/ScreenOrientationHelper.kt b/app/src/main/java/otus/gpb/homework/fragments/ScreenOrientationHelper.kt new file mode 100644 index 0000000..1522e7d --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/ScreenOrientationHelper.kt @@ -0,0 +1,15 @@ +package otus.gpb.homework.fragments + +import android.content.res.Configuration +import android.content.res.Resources + +object ScreenOrientationHelper { + + fun getScreenOrientation(resources: Resources): String { + return when (resources.configuration.orientation) { + Configuration.ORIENTATION_PORTRAIT -> "PORTRAIT" + Configuration.ORIENTATION_LANDSCAPE -> "LANDSCAPE" + else -> "" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/fragments/fragments/FragmentA.kt b/app/src/main/java/otus/gpb/homework/fragments/fragments/FragmentA.kt new file mode 100644 index 0000000..796b7f4 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/fragments/fragments/FragmentA.kt @@ -0,0 +1,34 @@ +package otus.gpb.homework.fragments.fragments + +import android.os.Bundle +import android.view.View +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 + +class FragmentA : Fragment(R.layout.fragment_a) { + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + + val bundle = Bundle() + bundle.putInt("color", ColorGenerator.generateColor()) + val fragmentAA = FragmentAA() + fragmentAA.arguments = bundle + + view.findViewById