From 38937bedf28fbd49699329f5c6c0e37ccf6f0871 Mon Sep 17 00:00:00 2001 From: "Mikhail.Makhonin" Date: Fri, 14 Nov 2025 00:40:55 +0300 Subject: [PATCH 1/2] =?UTF-8?q?=D0=97=D0=B0=D0=B4=D0=B0=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D0=BE=20=D0=B0=D0=BA=D1=82=D0=B8=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D0=B8=20#1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 6 +-- app/src/main/AndroidManifest.xml | 21 ++++++++- .../otus/gpb/homework/activities/ActivityA.kt | 35 ++++++++++++++ .../otus/gpb/homework/activities/ActivityB.kt | 32 +++++++++++++ .../otus/gpb/homework/activities/ActivityC.kt | 46 +++++++++++++++++++ .../otus/gpb/homework/activities/ActivityD.kt | 33 +++++++++++++ .../homework/activities/BaseComponentsI.kt | 8 ++++ app/src/main/res/layout/activity_a.xml | 16 +++++++ app/src/main/res/layout/activity_b.xml | 15 ++++++ app/src/main/res/layout/activity_c.xml | 29 ++++++++++++ app/src/main/res/layout/activity_d.xml | 15 ++++++ app/src/main/res/layout/base.xml | 16 +++++++ app/src/main/res/values/strings.xml | 10 ++++ gradle/wrapper/gradle-wrapper.properties | 3 +- 14 files changed, 280 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/otus/gpb/homework/activities/ActivityA.kt create mode 100644 app/src/main/java/otus/gpb/homework/activities/ActivityB.kt create mode 100644 app/src/main/java/otus/gpb/homework/activities/ActivityC.kt create mode 100644 app/src/main/java/otus/gpb/homework/activities/ActivityD.kt create mode 100644 app/src/main/java/otus/gpb/homework/activities/BaseComponentsI.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_c.xml create mode 100644 app/src/main/res/layout/activity_d.xml create mode 100644 app/src/main/res/layout/base.xml diff --git a/app/build.gradle b/app/build.gradle index 07e82a52..908e3ef3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -24,11 +24,11 @@ android { } } compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 } kotlinOptions { - jvmTarget = '1.8' + jvmTarget = '17' } namespace 'otus.gpb.homework.activities' buildFeatures { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 811aafa1..aa92b67f 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,25 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Activities" - tools:targetApi="31" /> + tools:targetApi="31"> + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/activities/ActivityA.kt b/app/src/main/java/otus/gpb/homework/activities/ActivityA.kt new file mode 100644 index 00000000..b4b47684 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/activities/ActivityA.kt @@ -0,0 +1,35 @@ +package otus.gpb.homework.activities + +import android.content.Intent +import android.os.Bundle +import android.view.ViewGroup +import android.widget.Button +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class ActivityA : AppCompatActivity(), BaseComponentsI { + + override lateinit var buttonOpenView: Button + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_a) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + getSupportActionBar()?.setTitle("Activity A") + + buttonOpenView = findViewById(R.id.base).findViewById(R.id.button) + buttonOpenView.text = resources.getStringArray(R.array.open_buttons)[1] // Open Activity B + buttonOpenView.setOnClickListener { + startActivity( Intent(this, ActivityB::class.java)) + } + } + + +} diff --git a/app/src/main/java/otus/gpb/homework/activities/ActivityB.kt b/app/src/main/java/otus/gpb/homework/activities/ActivityB.kt new file mode 100644 index 00000000..d022e026 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/activities/ActivityB.kt @@ -0,0 +1,32 @@ +package otus.gpb.homework.activities + +import android.content.Intent +import android.os.Bundle +import android.view.ViewGroup +import android.widget.Button +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class ActivityB : AppCompatActivity(), BaseComponentsI { + override lateinit var buttonOpenView: Button + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_b) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + getSupportActionBar()?.setTitle("Activity B") + + buttonOpenView = findViewById(R.id.base).findViewById(R.id.button) + buttonOpenView.text = resources.getStringArray(R.array.open_buttons)[2] // Open Activity C + buttonOpenView.setOnClickListener { + startActivity( Intent(this, ActivityC::class.java)) + } + } +} diff --git a/app/src/main/java/otus/gpb/homework/activities/ActivityC.kt b/app/src/main/java/otus/gpb/homework/activities/ActivityC.kt new file mode 100644 index 00000000..d2ded972 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/activities/ActivityC.kt @@ -0,0 +1,46 @@ +package otus.gpb.homework.activities + +import android.content.Intent +import android.os.Bundle +import android.view.ViewGroup +import android.widget.Button +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class ActivityC : AppCompatActivity() { + private lateinit var btn1:Button // Open A + private lateinit var btn2:Button // Open D + private lateinit var btn3:Button // Close C + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_c) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + getSupportActionBar()?.setTitle("Activity C") + + btn1 = findViewById(R.id.base_1).findViewById(R.id.button) + btn1.text = resources.getStringArray(R.array.open_buttons)[0] // Open Activity A + btn1.setOnClickListener { startActivity(Intent(this, ActivityA::class.java)) } + + btn2 = findViewById(R.id.base_2).findViewById(R.id.button) + btn2.text = resources.getStringArray(R.array.open_buttons)[3] // Open Activity D + btn2.setOnClickListener { + val intent = Intent(this, ActivityD::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK) + startActivity(intent) + } + + btn3 = findViewById(R.id.base_3).findViewById(R.id.button) + btn3.text = resources.getStringArray(R.array.close_buttons)[0] // Close Activity C + btn3.setOnClickListener { finish() } + + } +} diff --git a/app/src/main/java/otus/gpb/homework/activities/ActivityD.kt b/app/src/main/java/otus/gpb/homework/activities/ActivityD.kt new file mode 100644 index 00000000..d0a0fce4 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/activities/ActivityD.kt @@ -0,0 +1,33 @@ +package otus.gpb.homework.activities + +import android.os.Bundle +import android.view.ViewGroup +import android.widget.Button +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class ActivityD : AppCompatActivity(), BaseComponentsI { + override lateinit var buttonOpenView: Button + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_d) + ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets -> + val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()) + v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) + insets + } + + getSupportActionBar()?.setTitle("Activity D") + + buttonOpenView = findViewById(R.id.base).findViewById(R.id.button) + buttonOpenView.text = resources.getStringArray(R.array.close_buttons)[1] // Close Stack + buttonOpenView.setOnClickListener { + finishAffinity() + } + } + + +} diff --git a/app/src/main/java/otus/gpb/homework/activities/BaseComponentsI.kt b/app/src/main/java/otus/gpb/homework/activities/BaseComponentsI.kt new file mode 100644 index 00000000..36be8cc3 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/activities/BaseComponentsI.kt @@ -0,0 +1,8 @@ +package otus.gpb.homework.activities + +import android.widget.Button + + +interface BaseComponentsI { + val buttonOpenView: Button +} 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 00000000..fb53aa35 --- /dev/null +++ b/app/src/main/res/layout/activity_a.xml @@ -0,0 +1,16 @@ + + + + + + + \ 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 00000000..e3803bc1 --- /dev/null +++ b/app/src/main/res/layout/activity_b.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_c.xml b/app/src/main/res/layout/activity_c.xml new file mode 100644 index 00000000..f2e5bbbe --- /dev/null +++ b/app/src/main/res/layout/activity_c.xml @@ -0,0 +1,29 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_d.xml b/app/src/main/res/layout/activity_d.xml new file mode 100644 index 00000000..7fc09332 --- /dev/null +++ b/app/src/main/res/layout/activity_d.xml @@ -0,0 +1,15 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/base.xml b/app/src/main/res/layout/base.xml new file mode 100644 index 00000000..601c260f --- /dev/null +++ b/app/src/main/res/layout/base.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 08ea3c61..173c5470 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,13 @@ Activities + + Open Activity A + Open Activity B + Open Activity C + Open Activity D + + + Close Activity C + Close Stack + \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fb9e5b80..2bdc1ccb 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,7 @@ #Sat Aug 27 13:57:30 MSK 2022 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +#distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip distributionPath=wrapper/dists zipStorePath=wrapper/dists zipStoreBase=GRADLE_USER_HOME From bfcbe894dc6f7a405823d3057c1cbbf7553cc0a1 Mon Sep 17 00:00:00 2001 From: "Mikhail.Makhonin" Date: Mon, 17 Nov 2025 23:42:48 +0300 Subject: [PATCH 2/2] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 9 ++++++--- .../main/java/otus/gpb/homework/activities/ActivityA.kt | 7 ++++++- .../main/java/otus/gpb/homework/activities/ActivityC.kt | 7 ++++++- 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aa92b67f..2d1dc906 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,13 +15,16 @@ + android:exported="false" + android:taskAffinity="tasks2"/> + android:exported="false" + android:taskAffinity="tasks2"/> + android:exported="false" + android:taskAffinity="tasks2"/> diff --git a/app/src/main/java/otus/gpb/homework/activities/ActivityA.kt b/app/src/main/java/otus/gpb/homework/activities/ActivityA.kt index b4b47684..e0eb4fe2 100644 --- a/app/src/main/java/otus/gpb/homework/activities/ActivityA.kt +++ b/app/src/main/java/otus/gpb/homework/activities/ActivityA.kt @@ -2,6 +2,7 @@ package otus.gpb.homework.activities import android.content.Intent import android.os.Bundle +import android.util.Log import android.view.ViewGroup import android.widget.Button import androidx.activity.enableEdgeToEdge @@ -27,9 +28,13 @@ class ActivityA : AppCompatActivity(), BaseComponentsI { buttonOpenView = findViewById(R.id.base).findViewById(R.id.button) buttonOpenView.text = resources.getStringArray(R.array.open_buttons)[1] // Open Activity B buttonOpenView.setOnClickListener { - startActivity( Intent(this, ActivityB::class.java)) + startActivity( Intent(this, ActivityB::class.java).addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)) } } + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + Log.d("ActivityA", "get ActivityA and call callback onNewIntent") + } } diff --git a/app/src/main/java/otus/gpb/homework/activities/ActivityC.kt b/app/src/main/java/otus/gpb/homework/activities/ActivityC.kt index d2ded972..56bccb59 100644 --- a/app/src/main/java/otus/gpb/homework/activities/ActivityC.kt +++ b/app/src/main/java/otus/gpb/homework/activities/ActivityC.kt @@ -27,7 +27,12 @@ class ActivityC : AppCompatActivity() { btn1 = findViewById(R.id.base_1).findViewById(R.id.button) btn1.text = resources.getStringArray(R.array.open_buttons)[0] // Open Activity A - btn1.setOnClickListener { startActivity(Intent(this, ActivityA::class.java)) } + btn1.setOnClickListener { + val intent = Intent(this, ActivityA::class.java) + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP) + startActivity(intent) + } btn2 = findViewById(R.id.base_2).findViewById(R.id.button) btn2.text = resources.getStringArray(R.array.open_buttons)[3] // Open Activity D