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 @@ - + + +