diff --git a/app/build.gradle b/app/build.gradle index 57688408..d4970256 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -5,7 +5,7 @@ plugins { } android { - compileSdk 34 + compileSdk 35 defaultConfig { applicationId "otus.gpb.homework.activities" @@ -60,4 +60,5 @@ dependencies { 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:1.10.0' } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e3d3319b..81510c87 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,12 @@ + + + + + (R.id.toolbar).apply { inflateMenu(R.menu.menu) @@ -28,6 +51,26 @@ class EditProfileActivity : AppCompatActivity() { } } } + imageView.setOnClickListener { + val items = arrayOf("Сделать фото", "Выбрать фото") + MaterialAlertDialogBuilder(this) + .setTitle("Сделать/показать фото") + .setItems(items) { _, which -> + when (which) { + 0 -> { setCameraPermission.launch(Manifest.permission.CAMERA) } + 1 -> { + val pickImg = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI) + showPicture.launch(pickImg) + } + } + } + .show() + } + + editProfile.setOnClickListener(){ + val fillForm = Intent(this, FillFormActivity::class.java) + fillFormAct.launch( fillForm ) + } } /** @@ -39,6 +82,73 @@ class EditProfileActivity : AppCompatActivity() { } private fun openSenderApp() { - TODO("В качестве реализации метода отправьте неявный Intent чтобы поделиться профилем. В качестве extras передайте заполненные строки и картинку") + + val textToSend = "${userFirstName.text} ${userSurName.text} ${userBirthday.text}" + val shareIntent = Intent(Intent.ACTION_SEND).apply { + setPackage("org.telegram.messenger") + setType("image/*") + if ( pictureUri != null) putExtra(Intent.EXTRA_STREAM, pictureUri ) + putExtra(Intent.EXTRA_TEXT, textToSend ) + } + startActivity( shareIntent ) + + } + + private val fillFormAct = registerForActivityResult( ActivityResultContracts.StartActivityForResult()) { + result-> + if ( result.resultCode == Activity.RESULT_OK) { + val data = result.data + userFirstName.text = data?.getStringExtra("firstname") + userSurName.text = data?.getStringExtra("surname") + userBirthday.text = data?.getStringExtra("birthday") + val sendText = "${userFirstName.text} ${userSurName.text} ${userBirthday.text}" + Log.d( "VPM_Log", sendText ) + + } + } + + + private val setCameraPermission = registerForActivityResult( ActivityResultContracts.RequestPermission() ) { + isPermit -> + when (isPermit) { + true -> findViewById( R.id.imageview_photo ).setImageResource( R.drawable.cat ) + false -> if ( shouldShowRequestPermissionRationale(Manifest.permission.CAMERA )) { + clarifyingDialog() + } else { settingsDialog() } + } + } + + private val showPicture = registerForActivityResult( ActivityResultContracts.StartActivityForResult()) { + result-> + if ( result.resultCode == Activity.RESULT_OK) { + val imgUri = result.data?.data + if( imgUri != null ){ + pictureUri = imgUri + populateImage( imgUri ) + } + } + } + + private fun clarifyingDialog() { + MaterialAlertDialogBuilder(this) + .setTitle("Камера отключена") + .setMessage("Необходимо настроить разрешение для камеры") + .setPositiveButton("Настроить разрешение") { dialog, which -> + setCameraPermission.launch(Manifest.permission.CAMERA) + } + .setNegativeButton("Отмена") { dialog, _ -> + dialog.dismiss() + }.show() + } + + private fun settingsDialog() { + MaterialAlertDialogBuilder(this) + .setCancelable( true ) + .setTitle("Камера отключена") + .setMessage("Необходимо настроить разрешение для камеры") + .setPositiveButton("Открыть настройки") { dialog, which -> + startActivity( Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS, "package:$packageName".toUri() )) + } + .show() } } \ No newline at end of file diff --git a/app/src/main/java/otus/gpb/homework/activities/FillFormActivity.kt b/app/src/main/java/otus/gpb/homework/activities/FillFormActivity.kt new file mode 100644 index 00000000..fd396f21 --- /dev/null +++ b/app/src/main/java/otus/gpb/homework/activities/FillFormActivity.kt @@ -0,0 +1,43 @@ +package otus.gpb.homework.activities + +import android.app.Activity +import android.content.Intent +import android.os.Bundle +import android.widget.Button +import android.widget.EditText +import androidx.activity.enableEdgeToEdge +import androidx.appcompat.app.AppCompatActivity +import androidx.core.view.ViewCompat +import androidx.core.view.WindowInsetsCompat + +class FillFormActivity : AppCompatActivity() { + + private lateinit var applyButton: Button + private lateinit var firstName: EditText + private lateinit var surName: EditText + private lateinit var birthday: EditText + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + enableEdgeToEdge() + setContentView(R.layout.activity_fill_form) + 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 + } + + applyButton = findViewById( R.id.Apply_button) + firstName = findViewById( R.id.Firstname_input ) + surName = findViewById( R.id.Surname_input ) + birthday = findViewById( R.id.Birthday_input ) + applyButton.setOnClickListener { + val resultIntent = Intent() + resultIntent.putExtra("firstname", firstName.text.toString() ) + resultIntent.putExtra("surname" , surName.text.toString() ) + resultIntent.putExtra("birthday" , birthday.text.toString() ) + setResult(Activity.RESULT_OK, resultIntent) + finish() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_edit_profile.xml b/app/src/main/res/layout/activity_edit_profile.xml index eb4a7197..704c0d9d 100644 --- a/app/src/main/res/layout/activity_edit_profile.xml +++ b/app/src/main/res/layout/activity_edit_profile.xml @@ -61,7 +61,7 @@ app:layout_constraintTop_toBottomOf="@+id/textview_surname" />