diff --git a/app/build.gradle b/app/build.gradle
index 57688408..0b8d43c8 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -4,8 +4,9 @@ plugins {
id("io.gitlab.arturbosch.detekt")
}
+
android {
- compileSdk 34
+ compileSdk 36
defaultConfig {
applicationId "otus.gpb.homework.activities"
@@ -57,7 +58,8 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.12.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
- implementation 'androidx.activity:activity-ktx:1.9.0'
implementation 'androidx.fragment:fragment-ktx:1.7.1'
implementation 'com.squareup.picasso:picasso:2.71828'
+ implementation 'androidx.activity:activity-ktx:1.8.0'
+ implementation 'androidx.activity:activity:1.8.0'
}
\ No newline at end of file
diff --git a/app/release/baselineProfiles/0/app-release.dm b/app/release/baselineProfiles/0/app-release.dm
new file mode 100644
index 00000000..b91332f3
Binary files /dev/null and b/app/release/baselineProfiles/0/app-release.dm differ
diff --git a/app/release/baselineProfiles/1/app-release.dm b/app/release/baselineProfiles/1/app-release.dm
new file mode 100644
index 00000000..35292f9f
Binary files /dev/null and b/app/release/baselineProfiles/1/app-release.dm differ
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e3d3319b..0e07166b 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,13 @@
+
+
+
+
+
-
-
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/otus/gpb/homework/activities/EditProfileActivity.kt b/app/src/main/java/otus/gpb/homework/activities/EditProfileActivity.kt
index d55ee922..a3e243fc 100644
--- a/app/src/main/java/otus/gpb/homework/activities/EditProfileActivity.kt
+++ b/app/src/main/java/otus/gpb/homework/activities/EditProfileActivity.kt
@@ -1,14 +1,112 @@
package otus.gpb.homework.activities
+import android.Manifest
+import android.content.ActivityNotFoundException
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
import android.graphics.BitmapFactory
+import android.graphics.drawable.BitmapDrawable
import android.net.Uri
import android.os.Bundle
+import android.os.Environment
+import android.provider.MediaStore
+import android.provider.Settings
+import android.util.Log
+import android.widget.Button
+import android.widget.EditText
import android.widget.ImageView
+import android.widget.TextView
+import android.widget.Toast
+import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.Toolbar
+import androidx.core.content.FileProvider
+import androidx.core.net.toUri
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import java.io.ByteArrayOutputStream
+import java.io.File
+import java.io.FileOutputStream
class EditProfileActivity : AppCompatActivity() {
+ private val launchPermissionCamera = registerForActivityResult(
+ ActivityResultContracts.RequestPermission()
+ ) { isGranted ->
+ when (isGranted) {
+ // Разрешение получено - показываем кота
+ true -> findViewById(R.id.imageview_photo).setImageResource(R.drawable.cat)
+ // Разрешение не получено
+ false -> if (shouldShowRequestPermissionRationale(Manifest.permission.CAMERA)) {
+ // Отображаем диалог с обоснованием перед запросом разрешения
+ showRationaleDialog()
+ } else {
+ showOpenSettingsDialog()
+ }
+ }
+ }
+
+ private val launcherGetPicture = registerForActivityResult(
+ ActivityResultContracts.GetContent()
+ ) { image ->
+ if (image != null) {
+ //findViewById(R.id.imageview_photo).setImageURI(image)
+ populateImage(image)
+ }
+ }
+
+ private val launcherFillFormActivity = registerForActivityResult(
+ ActivityResultContracts.StartActivityForResult()
+ ) { result ->
+ when (result.resultCode) {
+ RESULT_OK -> {
+ val data = result.data
+ if (data != null) {
+ val name = data.getStringExtra("name") ?: ""
+ val surname = data.getStringExtra("surname") ?: ""
+ val age = data.getIntExtra("age", 0)
+
+ findViewById(R.id.textview_name).text = name
+ findViewById(R.id.textview_surname).text = surname
+ findViewById(R.id.textview_age).text = age.toString()
+ }
+ }
+
+ RESULT_CANCELED -> {
+ Toast.makeText(this, "Галя, у нас отмена!", Toast.LENGTH_SHORT).show()
+ }
+ }
+ }
+
+ private fun showRationaleDialog() {
+ MaterialAlertDialogBuilder(this)
+ .setTitle("Нужен доступ к камере")
+ .setMessage("Для создания фотографии профиля необходимо разрешение на использование камеры")
+ .setPositiveButton("Дать доступ") { dialog, which ->
+ // Повторно запрашиваем разрешение
+ launchPermissionCamera.launch(Manifest.permission.CAMERA)
+ }
+ .setNegativeButton("Отмена") { dialog, which ->
+ dialog.dismiss()
+ }.show()
+ }
+
+ private fun showOpenSettingsDialog() {
+ MaterialAlertDialogBuilder(this)
+ .setTitle("Доступ к камере запрещен")
+ .setMessage("Для использования камеры необходимо предоставить разрешение в настройках приложения")
+ .setPositiveButton("Открыть настройки") { dialog, which ->
+ startActivity(
+ Intent(
+ Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
+ "package:$packageName".toUri()
+ )
+ )
+ }
+ .setCancelable(false)
+ .show()
+ }
+
private lateinit var imageView: ImageView
override fun onCreate(savedInstanceState: Bundle?) {
@@ -24,10 +122,35 @@ class EditProfileActivity : AppCompatActivity() {
openSenderApp()
true
}
+
else -> false
}
}
}
+
+ imageView.setOnClickListener {
+ val items = arrayOf("Сделать фото", "Выбрать фото")
+ MaterialAlertDialogBuilder(this)
+ .setTitle("Выберите действие")
+ .setItems(items) { dialog, which ->
+ when (which) {
+ 0 -> { // Сделать фото
+ launchPermissionCamera.launch(Manifest.permission.CAMERA)
+ }
+
+ 1 -> { // Выбрать фото из галереи
+ launcherGetPicture.launch("image/*")
+ }
+ }
+ }
+ .show()
+ }
+
+ findViewById