diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 2a4bbd8..0c9f587 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -45,4 +45,6 @@ dependencies {
testImplementation(libs.junit)
androidTestImplementation(libs.androidx.junit)
androidTestImplementation(libs.androidx.espresso.core)
+ val fragment_version = "1.8.9"
+ implementation("androidx.fragment:fragment-ktx:$fragment_version")
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 398b755..bdaae00 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -1,7 +1,7 @@
-
+
+ android:exported="true">
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_25_2/MainActivity.kt b/app/src/main/java/com/example/android_25_2/MainActivity.kt
index aed359b..e4b4e62 100644
--- a/app/src/main/java/com/example/android_25_2/MainActivity.kt
+++ b/app/src/main/java/com/example/android_25_2/MainActivity.kt
@@ -1,20 +1,116 @@
package com.example.android_25_2
+import android.app.NotificationChannel
+import android.app.NotificationManager
+import android.Manifest
+import android.app.PendingIntent
+import android.content.Context
+import android.content.Intent
+import android.content.pm.PackageManager
+import android.os.Build
import android.os.Bundle
+import android.widget.Button
+import android.widget.TextView
+import android.widget.Toast
import androidx.activity.enableEdgeToEdge
+import androidx.activity.result.ActivityResultLauncher
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
+import androidx.core.app.ActivityCompat
+import androidx.core.app.NotificationCompat
+import androidx.core.app.NotificationManagerCompat
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
+import kotlin.random.Random
+const val CHANNEL_ID = "channel_id"
class MainActivity : AppCompatActivity() {
+ private lateinit var launcher: ActivityResultLauncher
+
+ fun createNotificationChannel() {
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ val name = getString(R.string.channel_name)
+ val descriptionText = getString(R.string.content_text)
+ val importance = NotificationManager.IMPORTANCE_DEFAULT
+ val channel = NotificationChannel(CHANNEL_ID, name, importance).apply {
+ description = descriptionText
+ }
+ val notificationManager: NotificationManager =
+ getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
+ notificationManager.createNotificationChannel(channel)
+ }
+ }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
+
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
}
+ createNotificationChannel()
+
+ val requestPermissionLauncher =
+ registerForActivityResult(
+ ActivityResultContracts.RequestPermission()
+ ) { isGranted: Boolean ->
+ if (isGranted) {
+ Toast.makeText(this, R.string.message_permission_yes, Toast.LENGTH_SHORT).show()
+ createNotificationChannel()
+ } else {
+ Toast.makeText(this, R.string.message_permission_no, Toast.LENGTH_SHORT).show()
+ }
+ }
+ launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {}
+
+ val textView: TextView = findViewById(R.id.textView_main)
+
+ val toastButton: Button = findViewById(R.id.button_toast)
+ toastButton.setOnClickListener {
+ Toast.makeText(this@MainActivity, getString(R.string.toast_message), Toast.LENGTH_SHORT).show()
+ }
+
+ val countButton: Button = findViewById(R.id.button_count)
+ countButton.setOnClickListener {
+ val currentText1 = textView.text.toString().toInt()
+ val newCount = currentText1 + 1
+ textView.text = newCount.toString()
+ }
+
+ val intent = Intent(this, SecondActivity::class.java)
+ val pendingIntent = PendingIntent.getActivity(this@MainActivity, 0, intent, PendingIntent.FLAG_IMMUTABLE)
+
+ val builder = NotificationCompat.Builder(this, CHANNEL_ID)
+ .setSmallIcon(R.drawable.ic_launcher_foreground)
+ .setContentTitle(getString(R.string.content_title))
+ .setContentText(getString(R.string.content_text))
+ .setPriority(NotificationCompat.PRIORITY_DEFAULT)
+ .setContentIntent(pendingIntent)
+ .addAction(R.drawable.ic_launcher_background, getString(R.string.builder_action_close), null)
+
+ val randomButton: Button = findViewById(R.id.button_random)
+ randomButton.setOnClickListener {
+ with(NotificationManagerCompat.from(this)) {
+ if (ActivityCompat.checkSelfPermission(
+ this@MainActivity,
+ Manifest.permission.POST_NOTIFICATIONS
+ ) != PackageManager.PERMISSION_GRANTED
+ ) {
+ Toast.makeText(this@MainActivity, R.string.message_permission_no, Toast.LENGTH_SHORT).show()
+ return@setOnClickListener
+ }
+ }
+ NotificationManagerCompat.from(this).notify(0, builder.build())
+ val randomNumber = Random.nextInt(0, textView.text.toString().toInt())
+ launchSecondActivity(randomNumber)
+ }
+ }
+
+ fun launchSecondActivity(randomNumber: Int) {
+ val intent = Intent(this, SecondActivity::class.java)
+ intent.putExtra("random_number", randomNumber)
+ launcher.launch(intent)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android_25_2/SecondActivity.kt b/app/src/main/java/com/example/android_25_2/SecondActivity.kt
new file mode 100644
index 0000000..bf18cfd
--- /dev/null
+++ b/app/src/main/java/com/example/android_25_2/SecondActivity.kt
@@ -0,0 +1,36 @@
+package com.example.android_25_2
+
+import android.app.Activity
+import android.content.Intent
+import android.os.Bundle
+import android.util.Log
+import android.widget.Button
+import android.widget.TextView
+import androidx.activity.result.ActivityResult
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.activity.result.registerForActivityResult
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.ViewCompat
+import androidx.core.view.WindowInsetsCompat
+import kotlin.random.Random
+
+class SecondActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(R.layout.activity_second)
+ ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.Second)) { v, insets ->
+ val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
+ insets
+ }
+
+ val textView: TextView = findViewById(R.id.textView_main)
+
+ val receivedRandomNumber = intent.getIntExtra("random_number", 0)
+ textView.text = receivedRandomNumber.toString()
+
+ val resultIntent = Intent()
+ resultIntent.putExtra("random_number", textView.text)
+ setResult(Activity.RESULT_OK, resultIntent)
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
index 9affce0..7d7704c 100644
--- a/app/src/main/res/layout/activity_main.xml
+++ b/app/src/main/res/layout/activity_main.xml
@@ -1,10 +1,63 @@
-
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_second.xml b/app/src/main/res/layout/activity_second.xml
new file mode 100644
index 0000000..45e7ded
--- /dev/null
+++ b/app/src/main/res/layout/activity_second.xml
@@ -0,0 +1,62 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index f8c6127..774f18e 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -5,6 +5,7 @@
#FF3700B3
#FF03DAC5
#FF018786
+ #1E90FF
#FF000000
#FFFFFFFF
\ 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 13379b4..f523031 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,3 +1,15 @@
Android_25-2
+ "COUNT"
+ "TOAST"
+ "RANDOM"
+ "Boink"
+
+ "Notification permission has been granted"
+ "Notification permission denied"
+ "id"
+ "name"
+ "Random number"
+ "your number has arrived"
+ "close"
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 8162ca2..2cb92c2 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -9,6 +9,7 @@ appcompat = "1.7.1"
material = "1.12.0"
activity = "1.11.0"
constraintlayout = "2.2.1"
+fragment_version = "1.8.9"
[libraries]
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }