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..2d1dc906 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,28 @@ 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..e0eb4fe2 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/activities/ActivityA.kt @@ -0,0 +1,40 @@ +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 +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).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/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..56bccb59 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/activities/ActivityC.kt @@ -0,0 +1,51 @@ +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 { + 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 + 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